#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>

int high,width;
int ball_x,ball_y;
int ball_vx,ball_vy;
int position_x,position_y;
int ridus;
int left,right; 

void gotoxy(int x,int y)
{
	HANDLE handle =GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X=x;
	pos.Y=y;
	SetConsoleCursorPosition(handle,pos);
}
void startup()
{
	high=15;
	width=20;
	ball_x=0;
	ball_y=width/2;
	ball_vx=1;
	ball_vy=1;
	ridus=5;
	position_x=high;
	position_y=width/2;
	left=position_y-ridus;
	right=position_y+ridus;
 }  
 void show ()
 {
 	 	gotoxy(0,0);
 	int i,j;
 	for (i=0;i<=high;i++)
 	{
 		for(j=0;j<=width;j++)
 		{
 		if((i==ball_x)&&(j==ball_y))
		 printf("0");
		 else if(j==width)
		 printf("|");	
		 else if(i==high+1)
		 printf("-");
		 else if((i==high)&&(j>=left)&&(j<=right))
		 printf("*");
		 else
		  printf(" ");
		 }
 		printf("\n");
	 }
 }
 
 void updatewithoutInput()
 {
 	ball_x=ball_x+ball_vx;
 	ball_y=ball_y+ball_vy;
 	if((ball_x==0)||(ball_x==high-1))
 	ball_vx=-ball_vx;
 	if((ball_y==0)||(ball_y==width-1))
 	ball_vy=-ball_vy;
 	Sleep(50);
 	
 }
 void updatewithInput()
 {
 	char input;
 	if(kbhit())
 	{
 		input=getch();
		 if(input=='a')
		 {
		 	position_y--;
		 	left=position_y-ridus;
		 	right=position_y+ridus;
		  } 
		  if(input=='d')
		  {
		  	position_y++;
		  	left=position_y-ridus;
		  	right=position_y+ridus;
			  
		  }
	 }
 }
 
  int main()
 {
 	startup();
 	while(1)
	 {
 		show();
 		void updatewithoutInput();
 		void updatewithInput();
	 }
	 return 0;
 }
